//package org.biz.common;
//
//import com.lowagie.text.Document;
//import com.lowagie.text.Font;
//import com.lowagie.text.PageSize;
//import com.lowagie.text.pdf.BaseFont;
//import com.lowagie.text.pdf.PdfWriter;
//import freemarker.template.Configuration;
//import freemarker.template.Template;
//import org.springframework.core.io.ClassPathResource;
//import org.springframework.util.FileCopyUtils;
//import org.xhtmlrenderer.pdf.ITextRenderer;
//
//import javax.servlet.ServletOutputStream;
//import javax.servlet.http.HttpServletResponse;
//import java.io.*;
//import java.nio.charset.StandardCharsets;
//import java.nio.file.Files;
//import java.nio.file.StandardCopyOption;
//import java.util.Base64;
//import java.util.Map;
//
//public class WordUtil {
//    private static final Configuration configuration;
//
//    static {
//        configuration = new Configuration(Configuration.VERSION_2_3_30);
//        configuration.setDefaultEncoding("UTF-8");
//        // 使用 classpath 加载模板
//        configuration.setClassLoaderForTemplateLoading(WordUtil.class.getClassLoader(), "/templates");
//    }
//
//    private WordUtil() {
//        throw new AssertionError();
//    }
//
//    /**
//     * 导出PDF
//     * @param response 响应对象
//     * @param map PDF文档中参数
//     * @param templateName 模板的名字 例如certificate.ftl
//     * @param fileName PDF文件的名字 格式为："xxxx.pdf"
//     * @throws IOException
//     */
//    public static void exportPdf(HttpServletResponse response, Map<String, Object> map,
//                                 String templateName, String fileName) throws IOException {
//        Template template = configuration.getTemplate(templateName);
//        StringWriter writer = new StringWriter();
//
//        try {
//            // 将图片转换为Base64编码
//            if (map.containsKey("backgroundImage")) {
//                String backgroundBase64 = imageToBase64((String) map.get("backgroundImage"));
//                map.put("backgroundImage", backgroundBase64);
//            }
//
//            if (map.containsKey("stampImage")) {
//                String stampBase64 = imageToBase64((String) map.get("stampImage"));
//                map.put("stampImage", stampBase64);
//            }
//
//            template.process(map, writer);
//            writer.flush();
//
//            String htmlContent = writer.toString();
//
//            response.setContentType("application/pdf");
//            response.setHeader("Content-Disposition", "attachment; filename=" +
//                    new String(fileName.getBytes(), StandardCharsets.ISO_8859_1));
//
//            // 使用 flying-saucer 生成PDF
//            ITextRenderer renderer = new ITextRenderer();
//
//            // 设置中文字体支持
//            setupChineseFonts(renderer);
//
//            renderer.setDocumentFromString(htmlContent);
//            renderer.layout();
//
//            ServletOutputStream out = response.getOutputStream();
//            renderer.createPDF(out);
//            out.flush();
//            out.close();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new IOException("生成PDF失败", e);
//        } finally {
//            writer.close();
//        }
//    }
//
//    /**
//     * 将图片转换为Base64编码
//     */
//    private static String imageToBase64(String path) throws IOException {
//        ClassPathResource resource = new ClassPathResource(path);
//        if (!resource.exists()) {
//            throw new FileNotFoundException("图片未找到: " + path);
//        }
//        byte[] data = FileCopyUtils.copyToByteArray(resource.getInputStream());
//        String base64 = Base64.getEncoder().encodeToString(data);
//        // 根据文件扩展名判断MIME类型
//        String mimeType = "image/png";
//        if (path.toLowerCase().endsWith(".jpg") || path.toLowerCase().endsWith(".jpeg")) {
//            mimeType = "image/jpeg";
//        } else if (path.toLowerCase().endsWith(".gif")) {
//            mimeType = "image/gif";
//        }
//        return "data:" + mimeType + ";base64," + base64;
//    }
//
//    /**
//     * 设置中文字体支持 - 跨平台解决方案
//     */
//    private static void setupChineseFonts(ITextRenderer renderer) {
//        try {
//            // 尝试加载常见的中文字体路径
//            String[] fontPaths = {
//                    // Windows 字体路径
//                    "C:/Windows/Fonts/simsun.ttc", // 宋体
//                    "C:/Windows/Fonts/simhei.ttf", // 黑体
//                    "C:/Windows/Fonts/msyh.ttc",   // 微软雅黑
//
//                    // Linux 字体路径
//                    "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf",
//                    "/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf",
//
//                    // Mac 字体路径
//                    "/System/Library/Fonts/PingFang.ttc",
//                    "/System/Library/Fonts/Hiragino Sans GB.ttc",
//
//                    // 使用Java的字体目录（如果字体已安装）
//                    System.getProperty("java.home") + "/lib/fonts/LucidaSansRegular.ttf"
//            };
//
//            // 尝试加载第一个可用的字体
//            boolean fontLoaded = false;
////            for (String fontPath : fontPaths) {
////                File fontFile = new File(fontPath);
////                if (fontFile.exists()) {
////                    try {
////                        renderer.getFontResolver().addFont(
////                                fontPath,
////                                BaseFont.IDENTITY_H,
////                                BaseFont.NOT_EMBEDDED
////                        );
////                        System.out.println("使用字体: " + fontPath);
////                        fontLoaded = true;
////                        break;
////                    } catch (Exception e) {
////                        System.err.println("无法加载字体: " + fontPath + ", 错误: " + e.getMessage());
////                    }
////                }
////            }
//
//            // 如果上述字体都不可用，尝试使用资源文件夹中的字体
//            try {
//                // 从classpath加载字体
//                ClassPathResource fontResource = new ClassPathResource("/fonts/simsun.ttc");
//                if (fontResource.exists()) {
//                    InputStream fontStream = fontResource.getInputStream();
//                    File tempFont = File.createTempFile("simsun", ".ttc");
//                    Files.copy(fontStream, tempFont.toPath(), StandardCopyOption.REPLACE_EXISTING);
//                    renderer.getFontResolver().addFont(
//                            tempFont.getAbsolutePath(),
//                            BaseFont.IDENTITY_H,
//                            BaseFont.NOT_EMBEDDED
//                    );
//                    tempFont.deleteOnExit();
//                    System.out.println("使用classpath中的字体");
//                    fontLoaded = true;
//                }
//            } catch (Exception e) {
//                System.err.println("无法加载classpath中的字体: " + e.getMessage());
//            }
//
//            // 如果仍然无法加载字体，使用默认字体
//            if (!fontLoaded) {
//                try {
//                    renderer.getFontResolver().addFont(
//                            "Helvetica",
//                            BaseFont.IDENTITY_H,
//                            BaseFont.NOT_EMBEDDED
//                    );
//                    System.out.println("使用默认字体Helvetica");
//                } catch (Exception e) {
//                    System.err.println("无法设置默认字体: " + e.getMessage());
//                }
//            }
//
//        } catch (Exception e) {
//            System.err.println("设置中文字体时出错: " + e.getMessage());
//        }
//    }
//}